package com.cs.framework.jdbc.hibernate3.dao;

import java.io.Serializable;
import java.util.List;

/**
 * Hibernate数据访问接口
 * 
 * @author hedongzhou
 * 
 */
public interface HibernateDao {

	/**
	 * 根据主键ID查找实体
	 * 
	 * @param <T>
	 * @param type
	 *            实体class
	 * @param id
	 *            主键ID
	 * @return
	 */
	public <T> T getById(Class<T> type, Serializable id);

	/**
	 * 保存实体，保存前做非空校验
	 * 
	 * @param <T>
	 * @param entity
	 * @return
	 */
	public <T> T save(T entity);

	/**
	 * 保存实体
	 * 
	 * @param <T>
	 * @param entity
	 * @param notNullCheck
	 *            是否需要做非空校验
	 * @return
	 */
	public <T> T save(T entity, boolean notNullCheck);

	/**
	 * 更新实体
	 * 
	 * @param <T>
	 * @param entity
	 * @return
	 */
	public <T> T update(T entity);

	/**
	 * 更新实体，更新前做非空校验
	 * 
	 * @param <T>
	 * @param entity
	 * @param notNullCheck
	 *            是否需要做非空校验
	 * @return
	 */
	public <T> T update(T entity, boolean notNullCheck);

	/**
	 * 执行更新SQL
	 * 
	 * @param sql
	 *            update语句
	 * @param params
	 *            参数
	 * @return 成功条数
	 */
	public int update(String sql, List<Object> params);

}
